﻿/*!
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

using System.IO;

namespace Pittypat
{
    /// <summary>
    /// 数据对象（<see cref="DataModel"/>）、功能模型（FunctionModel）、功能参数列表模型（FunctionArgs）等的抽象基类。
    /// </summary>
    public abstract class Model : IComplex
    {
        /// <summary>
        /// 初始化 <see cref="Model"/> 类的新实例。
        /// </summary>
        protected Model()
        {
        }

        /// <summary>
        /// 将当前对象作为 JSON 字符串写入指定的文本流。
        /// </summary>
        /// <param name="writer">目标文本流。</param>
        /// <exception cref="global::System.ArgumentNullException">writer 是 null。</exception>
        public abstract void Write(TextWriter writer);

        /// <summary>
        /// 将当前对象转换字符串格式
        /// </summary>
        /// <returns>对象的字符串表示形式。</returns>
        public override string ToString()
        {
            using (var writer = new StringWriter())
            {
                this.Write(writer);

                return writer.ToString();
            }
        }
    }
}
